package com.knowswift.issues.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.knowswift.common.bean.issue.vo.ModuleDto;
import com.knowswift.common.bean.project.po.Module;
import com.knowswift.common.bean.project.vo.ModuleVO;
import com.knowswift.common.bean.project.vo.ProjectVO;
import com.knowswift.common.common.Page;
import com.knowswift.common.utils.WrappedBeanCopier;
import com.knowswift.issues.mapper.ModuleMapper;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class ModuleService extends ServiceImpl<ModuleMapper, Module> {
    public Page<ModuleVO> findIssueModuleList(String keyword, int i, Page<ModuleVO> page) {
        page = getBaseMapper().getIssueModuleList(keyword, i, page);
        for (ModuleVO record : page.getRecords()) {
            List<ProjectVO> projectVOList = new ArrayList<>();
            for (Object project : record.getProjects()) {
                List<ProjectVO> projectVOS = WrappedBeanCopier.JSONArrayToList((List<?>) project, ProjectVO.class);
                for (ProjectVO projectVO : projectVOS) {
                    if (projectVO.getDeleted() == null) {
                        projectVO.setDeleted(false);
                    }
                    boolean flag = false;
                    for (ProjectVO vo : projectVOList) {
                        if (vo.getProjectName().equals(projectVO.getProjectName())) {
                            if (vo.getDeleted() && !projectVO.getDeleted()) {
                                vo.setDeleted(false);
                                vo.setProjectOrder(projectVO.getProjectOrder());
                            }
                            flag = true;
                            break;
                        }
                    }
                    if (!flag) {
                        projectVOList.add(projectVO);
                    }
                }
            }
            record.setProjects(projectVOList);
        }
        return page;
    }

    public List<Module> getmoduleList() {
        QueryWrapper<Module> wrapper= Wrappers.query();
        wrapper.eq("is_delete",0);
        List<Module> moduleList=getBaseMapper().selectList(wrapper);
        List<ModuleDto> moduleDtos =new ArrayList<>();
//        for (Module module : moduleList) {
//            String object = (String) module.getProjects();
//            try {
//                // 转换为 List<Map<String, Object>>
//                List<Map<String, Object>> projects = objectMapper.readValue(object, new TypeReference<List<Map<String, Object>>>() {
//                });
//                module.setProjects(projects);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
        return moduleList;

    }
}
